import request from '@/utils/request'
import type {
  CardType,
  MembershipCard,
  CreateCardTypeRequest,
  UpdateCardTypeRequest,
  CreateCardRequest,
  UpdateCardRequest,
  RechargeRequest,
  ConsumeRequest,
  CardTypeListResponse,
  CardListResponse,
  TransactionRecord
} from '@/types/api/card'
import type { BaseResponse, PaginationResponse } from '@/types/common/response'

/**
 * 会员卡管理相关API
 */
export const cardApi = {
  /**
   * 获取会员卡类型列表
   * @param params 查询参数
   */
  getCardTypeList(params: { page: number; pageSize: number; keyword?: string }) {
    return request.get<BaseResponse<PaginationResponse<CardType>>>('/card-types', { params })
  },

  /**
   * 获取会员卡类型详情
   * @param id 卡类型ID
   */
  getCardTypeDetail(id: number) {
    return request.get<BaseResponse<CardType>>(`/card-types/${id}`)
  },

  /**
   * 创建会员卡类型
   * @param data 卡类型信息
   */
  createCardType(data: CreateCardTypeRequest) {
    return request.post<BaseResponse<null>>('/card-types', data)
  },

  /**
   * 更新会员卡类型
   * @param id 卡类型ID
   * @param data 卡类型信息
   */
  updateCardType(id: number, data: UpdateCardTypeRequest) {
    return request.put<BaseResponse<null>>(`/card-types/${id}`, data)
  },

  /**
   * 删除会员卡类型
   * @param id 卡类型ID
   */
  deleteCardType(id: number) {
    return request.delete<BaseResponse<null>>(`/card-types/${id}`)
  },

  /**
   * 获取会员卡列表
   * @param params 查询参数
   */
  getCardList(params: { page: number; pageSize: number; keyword?: string; status?: number }) {
    return request.get<BaseResponse<PaginationResponse<MembershipCard>>>('/cards', { params })
  },

  /**
   * 获取会员卡详情
   * @param id 会员卡ID
   */
  getCardDetail(id: number) {
    return request.get<BaseResponse<MembershipCard>>(`/cards/${id}`)
  },

  /**
   * 创建会员卡
   * @param data 会员卡信息
   */
  createCard(data: CreateCardRequest) {
    return request.post<BaseResponse<null>>('/cards', data)
  },

  /**
   * 更新会员卡
   * @param id 会员卡ID
   * @param data 会员卡信息
   */
  updateCard(id: number, data: UpdateCardRequest) {
    return request.put<BaseResponse<null>>(`/cards/${id}`, data)
  },

  /**
   * 删除会员卡
   * @param id 会员卡ID
   */
  deleteCard(id: number) {
    return request.delete<BaseResponse<null>>(`/cards/${id}`)
  },

  /**
   * 激活会员卡
   * @param id 会员卡ID
   */
  activateCard(id: number) {
    return request.put<BaseResponse<null>>(`/cards/${id}/activate`)
  },

  /**
   * 冻结会员卡
   * @param id 会员卡ID
   */
  freezeCard(id: number) {
    return request.put<BaseResponse<null>>(`/cards/${id}/freeze`)
  },

  /**
   * 解冻会员卡
   * @param id 会员卡ID
   */
  unfreezeCard(id: number) {
    return request.put<BaseResponse<null>>(`/cards/${id}/unfreeze`)
  },

  /**
   * 注销会员卡
   * @param id 会员卡ID
   */
  cancelCard(id: number) {
    return request.put<BaseResponse<null>>(`/cards/${id}/cancel`)
  },

  /**
   * 充值
   * @param data 充值信息
   */
  recharge(data: RechargeRequest) {
    return request.post<BaseResponse<null>>('/cards/recharge', data)
  },

  /**
   * 消费
   * @param data 消费信息
   */
  consume(data: ConsumeRequest) {
    return request.post<BaseResponse<null>>('/cards/consume', data)
  },

  /**
   * 获取交易记录列表
   * @param params 查询参数
   */
  getTransactionRecords(params: { page: number; pageSize: number; cardId?: number; type?: number }) {
    return request.get<BaseResponse<PaginationResponse<TransactionRecord>>>('/transactions', { params })
  }
}
